/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle;

import modelo.Animal;
import classes.BancoDeDados;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


/**
 *
 * @author cardodav
 */
public class AnimalDAO {

    public Animal getAnimaisByCodigoAnimal(int codigoAnimal){
    
        Animal _a = new Animal();

        BancoDeDados bd = new BancoDeDados();

        String query = " SELECT a.sexo, to_char(a.datanasc,'YYYY-MM-DD') datanasc, a.codigoanimal, a.nomeanimal, to_char(a.datacadastro,'YYYY-MM-DD') datacadastro, a.porte, a.codigoraca, a.codigopessoa " +
                       " FROM vetlion.animal a " +
                       " WHERE a.codigoanimal = " + codigoAnimal;
        ResultSet rs = bd.consultar(query);
        
        try {
            if (rs.next()){
                _a.setNomeAnimal(rs.getString("nomeanimal"));
                _a.setSexo(rs.getString("sexo"));
                _a.setDataNasc(rs.getString("datanasc"));
                _a.setCodigoAnimal(rs.getInt("codigoanimal"));
                _a.setDataCadastro(rs.getString("datacadastro"));
                _a.setPorte(rs.getString("porte"));
                _a.setEspecie(new EspecieDAO().getEspecieByRaca(rs.getInt("codigoRaca")));
                _a.setRaca(new RacaDAO().getRaca(rs.getInt("codigoRaca")));
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao retornar o animal: " + ex.getMessage());            
        }
        
        return _a;
        
    }
    
    public List<Animal> getAnimaisByCodigoCliente(int codigoPessoa){
    
        List<Animal> _la = new ArrayList<Animal>();

        BancoDeDados bd = new BancoDeDados();

        String query = " SELECT a.sexo, a.datanasc, a.codigoanimal, a.nomeanimal, to_char(a.datacadastro,'YYYY-MM-DD') datacadastro, a.porte, a.codigoraca, a.codigopessoa " +
                       " FROM vetlion.animal a " +
                       " WHERE a.codigopessoa = " + codigoPessoa;
        ResultSet rs = bd.consultar(query);
        
        try {
            while (rs.next()){
                Animal _a = new Animal();
                _a.setNomeAnimal(rs.getString("nomeanimal"));
                _a.setSexo(rs.getString("sexo"));
                _a.setDataNasc(rs.getString("datanasc"));
                _a.setCodigoAnimal(rs.getInt("codigoanimal"));
                _a.setDataCadastro(rs.getString("datacadastro"));
                _a.setPorte(rs.getString("porte"));
                _a.setEspecie(new EspecieDAO().getEspecieByRaca(rs.getInt("codigoRaca")));
                _a.setRaca(new RacaDAO().getRaca(rs.getInt("codigoRaca")));

                _la.add(_a);
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao retornar o animal: " + ex.getMessage());            
        }
        
        return _la;
        
    }
    
    public boolean salvarAnimal(int codigoPessoa, Animal _a){
    
        boolean retAnimal = false;
        
        BancoDeDados bd = new BancoDeDados();
        
        if (_a.getCodigoAnimal() == 0){
            //insere o animal
            try{
                String query = "insert into animal  (sexo, datanasc, codigoanimal, nomeanimal, datacadastro, porte, codigoraca, codigopessoa) values (" +
                        "'" + _a.getSexo() + "', to_date('" + _a.getDataNasc() +"','YYYY-MM-DD'), " + _a.getCodigoAnimal() + "," +
                        "'" + _a.getNomeAnimal() + "',sysdate,'" + _a.getPorte() + 
                        "'," + (new RacaDAO().getRacaByNome(_a.getRaca().getNome()).getCodigoRaca()) + "," + codigoPessoa + ")";

                int ret = bd.executarDML(query);
                if(ret == 0){
                    throw new Exception("Erro na query insert: " + _a.getNomeAnimal());
                } else {
                    retAnimal = true;
                }
            }
            catch(Exception ex){
                System.out.println("Erro ao inserir o novo animal: " + ex.getMessage());
            }  
        } else {
            try{
                //(sexo, datanasc, codigoanimal, nomeanimal, datacadastro, porte, codigoraca, codigopessoa)
                String query = "update animal set " +
                            " sexo = '" + _a.getSexo() + "', " +
                            " datanasc = to_date('" + _a.getDataNasc() + "','YYYY-MM-DD')," +
                            " nomeanimal = '" + _a.getNomeAnimal() + "'," +
                            " porte = '" + _a.getPorte() + "'," +
                            " codigoraca = " + (new RacaDAO().getRacaByNome(_a.getRaca().getNome()).getCodigoRaca()) + " " +
                        " where codigoanimal = " + _a.getCodigoAnimal() + " " ;

                int ret = bd.executarDML(query);
                if(ret == 0){
                    throw new Exception("Erro na query update: " + _a.getNomeAnimal());
                } else {
                    retAnimal = true;
                }
            }
            catch(Exception ex){
                System.out.println("Erro ao atualizar o animal: " + ex.getMessage());
            }  
        
        }
        
        return retAnimal;
    }
    
    public static int getCodigoProximo(){
    
        int ret = 0;
        
        BancoDeDados bd = new BancoDeDados();
        try{
            String query = "Select (max(codigoanimal) + 1) proximoCodigo from animal";            
            ResultSet rs = bd.consultar(query);
            if(rs.next()){
                ret = rs.getInt("proximoCodigo");
            }
        } catch (SQLException ex){
            System.out.println("Erro ao buscar o proximo codigo do animal: " + ex.getMessage());
        }
        bd.desconectar();
        
        return ret; 
        
    }       
    
}
